/**
 * Created by yangbin on 2016/4/26.
 * 用户管理界面对应js
 * 对应JSP为user.jsp
 */
define(["require", "jquery", "public/app"], function (require, $, app) {

    function User($container) {
        this._$container = $container;
        this._init();
    }

    User.prototype._initUrlPath = function () {
        this.urlPaths = {
            UserData: app.urlBuild("/dirms/security/user/query"),
            UserAddorEdit: app.urlBuild("/pages/app/security/userAddorEdit.jsp"),
            SaveUserData: app.urlBuild("/dirms/security/user/"),
            DelUserData: app.urlBuild("/dirms/security/user/"),
            ResetPWData: app.urlBuild("/dirms/security/user/resetpw"),
            DistributeRaleData: app.urlBuild("/pages/app/security/userAndRole.jsp"),
            RoleData: app.urlBuild("/dirms/security/userAndRole/availPage"),
            UserRoleData: app.urlBuild("/dirms/security/userAndRole/existPage"),
            SaveUserRoleData: app.urlBuild("/dirms/security/userAndRole/"),
            DelUserRoleData: app.urlBuild("/dirms/security/userAndRole/"),
            roleData :app.urlBuild("/dirms/security/role/all"),
            RoleUserData:app.urlBuild("/dirms/security/role/data/"),
            findUesrDataByName:app.urlBuild("/dirms/security/user/userData/"),
            actionExport_0: app.urlBuild("/dirms/security/user/export/0"),//全部导出
            actionExport_1: app.urlBuild("/dirms/security/user/export/1")//当前页导出
        }
    };

    User.prototype._init = function () {
        this._initUrlPath();
        var self = this;
        var dataReady = app.getDataReady();

        dataReady.pushDataSource({//逐个放入所有数据源
            url: this.urlPaths.UserData,
            key: 'UserData'
        });

        dataReady.pushDataSource({//逐个放入所有数据源
            url: this.urlPaths.RoleData,
            key: 'RoleData'
        });

        dataReady.once(function (readyData) {
            self._initComponents(readyData);
        });
    };

    User.prototype._initComponents = function () {
        //初始化控件
        this._initUserGrid();//初始化用户表格
        this._initEventBinding(this);//初始化事件绑定
        this._initSearch();//初始化搜索
    };

    var UserGrid;
    User.prototype._initSearch = function () {
        var self = this;
        //主表格搜索框
        $('#searchMenu').searchbox({
            //搜索功能未完成，应按照用户、角色、组织机构三类来进行搜索
            searcher: function (value,name) {
                if(name=='name'){
                }else if(name=='userName'){
                    if(value != ""){
                    $.ajax({
                        type:"GET",
                        url:self.urlPaths.findUesrDataByName+value,
                        success:function(data){
                            if(data==""||data==null){alert(value+" 用户不存在");}
                            else{
                                $('#_UserGrid').datagrid('loadData',data);
                                $('#searchMenu').searchbox('clear');
                            }
                        },
                        error:function(){alert("查询错误");}
                    });
                    }
                    else{
                        $('#_UserGrid').datagrid('reload');
                    }
                }
            },
            menu: '#search',
            prompt: '请输入关键字'
        });
    };
    //初始化表格
    User.prototype._initUserGrid = function () {
        var self = this;
        //主页面用户信息表格
        UserGrid=$('#_UserGrid').datagrid({
            rownumbers: true,
            pagination: true,
            singleSelect: true,
            url: this.urlPaths.UserData,
            method: 'get',
            title: '',
            width: 'auto',
            height: '100%',
            region: 'south',
            //对应model层字段
            columns: [[
                {field:'id',title:"用户编码",width:100,hidden:true},
                {field: 'name', title: '用户名', width: 100},
                {field: 'userName', title: '用户名称', width: 100},
                {field: 'password', title: '登录密码', width: 100,formatter:passwordFormat},
                {field: 'ofRole', title: '所属角色', width: 100},
                {field: 'sex', title: '性别', width: 100},
                {field: 'idCard', title: '身份证号', width: 100},
                {field: 'pwdUpdateTime', title: '密码更新时间', width: 100},
                {field: 'ldapPassword', title: 'LDAP密码', width: 100,hidden:true},
                {field: 'photoUri', title: '图像路径', width: 100},
                {field: 'labeledUri', title: '标记路径', width: 100},
                {field: 'employeeNumber', title: '员工编号', width: 100},
                {field: 'employeeType', title: '员工类型', width: 100},
                {field: 'birthDate', title: '生日', width: 100},
                {field: 'personStatus', title: '状态', width: 80},
                {field: 'reserveAccount', title: '储备账户', width: 100,hidden:true},
                {field: 'hrLoginId', title: 'HR登陆ID', width: 100,hidden:true}
            ]],
            toolbar: this._$container.find("#Toolbar")
        });
    };


        /**
         * 事件绑定
         */
        User.prototype._initEventBinding = function (self) {
            //【todo 在此编写绑定事件的方法。如按钮需要绑定的click事件。建议按如下格式绑定，并将this作为参数传入】
            //egg
            //用户管理首页五个按钮
            this._$container.find('#adduser_btn').on('click', {self: this}, this._actions.adduserClick);
            this._$container.find('#edituser_btn').on('click', {self: this}, this._actions.edituserClick);
            this._$container.find('#deleteuser_btn').on('click', {self: this}, this._actions.deleteuserClick);
            this._$container.find('#resetpw_btn').on('click', {self: this}, this._actions.resetpwClick);
            this._$container.find('#distribteRole_btn').on('click', {self: this}, this._actions.distribteRoleClick);

            /*
                        this._$container.find('#save_btn').on('click', {self: this}, this._actions.saveClick);
            */
            self._$container.find("#export_0").on("click", {self: this}, this._actions.export_0);
            self._$container.find("#export_1").on("click", {self: this}, this._actions.export_1);

        };


        /**
         * 在此定义此js用到的事件处理方法。如处理按钮click事件的方法
         * @type {{btcClick: Function}}
         */
        User.prototype._actions = {
            //【todo 在此定义此js用到的事件处理方法。如处理按钮click事件的方法】
            //添加用户按键方法
            adduserClick: function (evt) {
                //$('#useradd').form('clear');
                //$('#add').dialog('open');
                showUserDialog(evt);
            },

            //用户编辑按钮事件
            edituserClick:function(evt){
                //获取这一行内容
                var row = $("#_UserGrid").datagrid('getSelections');
                if (row == undefined||row.length==0 ) {
                    $.messager.alert('提示',"请选择编辑对象",'info');
                    return;
                }else if(row.length>1){
                    $.messager.alert('提示',"只能选择单条记录",'info');
                    return;
                }
                showUserDialog(evt,row);
            },

            //用户删除按钮事件
            deleteuserClick:function(evt){
                var row = $("#_UserGrid").datagrid('getSelections');
                if (row < 1) {
                    //1-1.如果没有任何一行选中 则提示
                    $.messager.alert("提示","请选择要操作的对象！", 'warning');
                    return;
                }else if(row.length>1){
                    $.messager.alert('提示',"只能选择单条记录",'info');
                    return;
                }
                $.messager.confirm("用户数据删除","您确定要删除吗？", function(r) {
                    if (r) {
                        /* if(row.length!=undefined){
                         for(var i=0;i<row.length;i++){
                         userIds.push(row[i].user_id);
                         }
                         }
                         var ids=userIds.join(",");*/
                        var url = evt.data.self.urlPaths.DelUserData+row[0].id;
                        $.ajax({
                            type:"DELETE",
                            url:url,
                            data:{"id":row[0].id},
                            dataType:"json",
                            success:function(data){
                                alert(1);
                                $("#_UserGrid").datagrid('reload');//重新加载列表数据
                                $.messager.alert('提示','删除用户成功!','info');
                            },
                            error:function(event, XMLHttpRequest, ajaxOptions, thrownError){
                                $.messager.alert('提示','删除用户失败!','info');
                            }
                        });
                    }
                });
            },

            resetpwClick:function(evt){
                var row = $("#_UserGrid").datagrid('getSelections');
                if (row < 1) {
                    $.messager.alert("提示","请选择要操作的对象！", 'warning');
                    return;
                }else if(row.length>1){
                    $.messager.alert('提示',"只能选择单条记录",'info');
                    return;
                }
                $.messager.confirm("用户密码重置","您确定要重置密码吗？", function(r) {
                    if (r) {
                        var url = evt.data.self.urlPaths.ResetPWData;
                        $.ajax({
                            type:"POST",
                            url:url,
                            data:{"id":row[0].id},
                            dataType:"json",
                            success:function(data){
                                $("#_UserGrid").datagrid('reload');//重新加载列表数据
                                $.messager.alert('提示','用户密码重置成功!','info');
                            },
                            error:function(event, XMLHttpRequest, ajaxOptions, thrownError){
                                $.messager.alert('提示','用户密码重置失败!','info');
                            }
                        });
                    }
                });
            },

            distribteRoleClick:function(evt){
                var row = $("#_UserGrid").datagrid('getSelections');
                if (row < 1) {
                    //1-1.如果没有任何一行选中 则提示
                    $.messager.alert("提示","请选择要操作的对象！", 'warning');
                    return;
                }else if(row.length>1){
                    $.messager.alert('提示',"只能选择单条记录",'info');
                    return;
                }
                distribteRoleDialog(evt,row);
            },
            export_0:function(evt){
                $.exportExcel(evt.data.self._$container.find("#_UserGrid"), "用户管理信息","用户管理信息列表", evt.data.self.urlPaths.actionExport_0);
            },
            export_1:function(evt){
                $.exportExcel(evt.data.self._$container.find("#_UserGrid"), "用户管理信息","用户管理信息列表", evt.data.self.urlPaths.actionExport_1);
            }

        };


        /**
         *
         * @param evt 点击时间
         * @param row  行记录数据
         */
        var showUserDialog = function(evt,row){
            var inputUrl =evt.data.self.urlPaths.UserAddorEdit;
            var title="";
            //判断是新增还是编辑
            if (typeof(row) != 'undefined'&&row.length==1) {
                title = '编辑用户';
            } else {
                title = '新增用户';
            }
            //对话框
            useraddOrEditdialog = $('<div id="user_addOrEdit"/>').dialog({
                title : title,
                top:100,
                width : 500,
                /*          height : 360,*/
                modal : true, //模式窗口：窗口背景不可操作
                resizable : false, //可拖动边框大小
                plain : true,
                href : inputUrl,
                buttons : [ {
                    text : '确定',
                    iconCls : 'icon-ok',
                    plain : true,
                    handler : function() {
                        //修改时 设置id为可用 新增是默认不可用
                        if (typeof(row) != 'undefined'&&row.length==1) {
                           $("#id").attr("disabled",false);
                        }
                        var userData = $("#useradd").serializeJsonStr();

                        var isValid = $('#useradd').form('validate');
                        if(!isValid){
                            return ;
                        }
                        $.ajax({
                            url:evt.data.self.urlPaths.SaveUserData,
                            type:"POST",
                            cache:false,
                            contentType: "application/json",
                            async : false,
                            dataType: "json",
                            data : userData,
                            beforeSend:function(XMLHttpRequest){
                                $.messager.progress({
                                    title : '提示信息！',
                                    text : '数据处理中，请稍后....'
                                });
                            },
                            success: function(data){
                                $.messager.progress('close');
                                if(typeof(data) != "undefined" && data !=null && data!=''){
                                    $.messager.alert('提示','保存成功！','info');
                                    $("#_UserGrid").datagrid('reload');//重新加载列表数据
                                    $("#user_addOrEdit").dialog('destroy');//销毁对话框
                                }
                            },
                            error: function (event, XMLHttpRequest, ajaxOptions, thrownError) {
                                $.messager.progress('close');
                                $.messager.alert('提示','数据保存失败！','info')
                            }
                        });
                    }
                }, {
                    text : '取消',
                    iconCls : 'icon-cancel',
                    plain : true,
                    handler : function() {
                        $("#user_addOrEdit").dialog('destroy');//销毁对话框
                    }
                } ],
                onClose : function() {
                    $(this).dialog('destroy');
                },
                onLoad : function() {
                    /*user_input_form_init(evt);*/
                    //编辑
                    if(row != undefined&&row.length==1){
                        // var id=row[0].id;
                        $("#useradd").form("load",row[0]);
                        // $('#id').val(id);
                    }
                }
            }).dialog('open');
        };

    var distribteRoleDialog = function(evt,row){
        /*var inputUrl =evt.data.self.urlPaths.UserAddorEdit;*/
        var inputUrl =evt.data.self.urlPaths.DistributeRaleData;
        var id = row[0].id;

        //对话框
        user_distribteRole_dialog = $('<div id="user_distribteRole"/>').dialog({
            title : '分配角色',
            top:100,
            width : 800,
            /*          height : 360,*/
            modal : true, //模式窗口：窗口背景不可操作
            resizable : false, //可拖动边框大小
            plain : true,
            href : inputUrl,
            buttons : [ {
                text : '确定',
                iconCls : 'icon-ok',
                plain : true,
                handler : function() {
                    $("#user_distribteRole").dialog('destroy');
                    //修改时 设置id为可用 新增是默认不可用

                }
            }, {
                text : '取消',
                iconCls : 'icon-cancel',
                plain : true,
                handler : function() {
                    $("#user_distribteRole").dialog('destroy');//销毁对话框
                }
            } ],
            onClose : function() {
                $(this).dialog('destroy');
            },
            onLoad : function() {
                //编辑
                if(row != undefined&&row.length==1){
                    // var id=row[0].id;
                    $("#distribteForm").form("load",row[0]);
                    // $('#id').val(id);
                    $('#existingRole').datagrid({
                        rownumbers: true,
                        pagination: true,
                        singleSelect: true,
                        url: evt.data.self.urlPaths.UserRoleData+'?id='+id,
                        method: 'get',
                        title: '选定角色',
                        width: 'auto',
                        height: '280px',
                        striped: true,

                        columns: [[
                            {field: 'id', title: '角色id', width: 200,hidden:true},
                            {field: 'ruid', title: '用户角色关系id', width: 200,hidden:true},
                            {field: 'name', title: '角色名称', width: 200}
                        ]]
                    });
                    //添加用户对话框右侧可选角色组表格
                    $('#availableRole').datagrid({
                        rownumbers: true,
                        pagination: true,
                        singleSelect: true,
                        url: evt.data.self.urlPaths.RoleData+'?id='+id,
                        method: 'get',
                        title: '可选角色',
                        width: 'auto',
                        height: '280px',
                        striped: true,

                        columns: [[
                            {field: 'id', title: '角色id', width: 200,hidden:true},
                            {field: 'name', title: '角色名称', width: 200}
                        ]]
                    });

                    /**
                     * 角色分配页面按钮事件
                     */
                   /* this._$container.find('#existSearch').on('click', {self: this}, this._actions.existSearchClick);


                    existSearchClick:function(evt){
                        alert(1);
                        var name = $("#existSearch").val();
                        $("#existingRole").datagrid('load', {
                            name : name
                        });
                    }*/
                    $('#existSearch').searchbox({
                        //搜索功能未完成，应按照用户、角色、组织机构三类来进行搜索
                        searcher: function (value,name) {
                            $("#existingRole").datagrid('load', {
                                name : value,
                                id:id
                            });
                        },
                        prompt: '请输入关键字'
                    });

                    $('#availableSearch').searchbox({
                        //搜索功能未完成，应按照用户、角色、组织机构三类来进行搜索
                        searcher: function (value,name) {
                            $("#availableRole").datagrid('load', {
                                name : value,
                                id:id
                            });
                        },
                        prompt: '请输入关键字'
                    });
                    //角色添加
                    $('#addRole_btn').on('click',{},function(){
                        var row = $("#availableRole").datagrid('getSelections');
                      //  var  roleName = app.utils.formToJSON({ofRole:row.name});
                        if (row < 1) {
                            //1-1.如果没有任何一行选中 则提示
                            $.messager.alert("提示","请选择要操作的对象！", 'warning');
                            return;
                        }else if(row.length>1){
                            $.messager.alert('提示',"只能选择单条记录",'info');
                            return;
                        }
                        $.ajax({
                            url:evt.data.self.urlPaths.SaveUserRoleData,
                            type:"POST",
                            cache:false,
                            contentType: "application/json",
                            async : false,
                            dataType: "json",
                            data : JSON.stringify({userId:id,roleId:row[0].id}),
                            success: function(data){
                                $("#existingRole").datagrid('load', {
                                    name : $('#existSearch').val(),
                                    id:id
                                });
                                $("#availableRole").datagrid('load', {
                                    name : $('#availableSearch').val(),
                                    id:id
                                });
                            },
                            error: function (event, XMLHttpRequest, ajaxOptions, thrownError) {
                                $.messager.alert('提示','添加失败！','info');
                            }
                        });



                    });
                    //角色移除
                    $('#removeRole_btn').on('click',{},function(){

                        var row = $("#existingRole").datagrid('getSelections');
                        if (row < 1) {
                            //1-1.如果没有任何一行选中 则提示
                            $.messager.alert("提示","请选择要操作的对象！", 'warning');
                            return;
                        }else if(row.length>1){
                            $.messager.alert('提示',"只能选择单条记录",'info');
                            return;
                        }
                        $.ajax({
                            url:evt.data.self.urlPaths.DelUserRoleData+row[0].id,
                            type:"DELETE",
                            cache:false,
                            contentType: "application/json",
                            async : false,
                            dataType: "json",
                          /*  data : {id:id,rid:row[0].id},*/
                            success: function(data){
                                $("#existingRole").datagrid('load', {
                                    name : $('#existSearch').val(),
                                    id:id
                                });
                                $("#availableRole").datagrid('load', {
                                    name : $('#availableSearch').val(),
                                    id:id
                                });
                            },
                            error: function (event, XMLHttpRequest, ajaxOptions, thrownError) {
                                $.messager.alert('提示','移除失败！','info');
                            }
                        });
                    });
                }
            }
        }).dialog('open');
     }

        /**
         * 隐藏密码,如果后期需要对特别用户提供展示，在此处修改
         * @param value
         * @param row
         * @param index
         */
        var passwordFormat = function(value,row,index){
            return "******";
        }

        return User;
    });
